...Et pas n'importe lequel ! Déjà, c'est un jeu que j'ai conçu et que je développe seul, et c'est d'abord pour cela que j'en parle. Mais Lux c'est aussi et surtout mon premier vrai jeu utilisant Flixel, une librairie Actionscript destinée au jeu vidéo. Un jeu "expérimental" donc, ce dont j'ai profité : c'est relativement simple, quelque peu psychédélique et casual dans l'âme. Mais quand même avec ce coté old school inhérent au genre : le shoot'em up. Un shoot en flash, donc à priori quelque chose de très banal, et pourtant le jeu se base sur un concept qui pourrait vous surprendre.
Le jeu se présente sous la forme d'un shoot vertical classique, auquel le joueur peut apporter sa propre musique. Cette fonctionnalité n'est pas anodine puisque c'est selon la musique que seront générés les ennemis qu'il faudra esquiver et abattre. Plus la musique est lourde, rapide, chaotique, et plus les ennemis sont nombreux par exemple. Et même si le jeu propose sept modes de difficulté, il s'avère bien plus facile de survivre sur une piste de Norah Jones que sur du Rammstein (non je ne suis pas payé pour citer des artistes).
Bien sur l'idée n'est pas totalement nouvelle, Beat Hazard par exemple reprend le même principe (ce n'est pas du plagiat, je ne connaissais d'ailleurs pas ce jeu au moment de lancer ce projet). La correspondance entre la musique et le résultat à l'écran n'y était d'ailleurs pas flagrante, un défaut que j'ai beaucoup de mal à contourner avec Lux (on y reviendra). Il y a aussi eu Audiosurf qui lui, en revanche, est assez bluffant à ce niveau-là.
Revenons à nos moutons. Le jeu ne se déroule pas dans un univers défini, il n'y a pas de scénario, j'ai juste voulu éviter le vaisseau et les laser (cf. les screenshots)... Lux est une expérience, pour moi-même en tant que concepteur mais aussi pour le joueur, plutôt qu'un jeu c'est une autre façon d'écouter sa musique. Ce n'est pas un jeu difficile ou stressant (on ne meurt pas), le seul challenge est le score. Quant au gameplay lui-même, c'est très simple : on se dirige à la souris, on tire en cliquant, et avec la barre d'espace on utilise une traditionnelle bombe.
On pourrait se dire qu'utiliser une librairie externe telle que Flixel n'était pas nécessaire : pas besoin de moteur physique, même simple, et ce n'est évidemment pas elle qui gère le spawn des ennemis (puisque c'est un bon vieux computeSpectrum, que j'ai déjà expérimenté pour un lecteur de musique). C'est ce que je me suis dit en commençant, mais je souhaitait surtout apprivoiser cette librairie très prometteuse ; j'ai donc continué et effectivement j'en ai eu bien besoin. Menus, sprites, bitmaps, boucle de jeu, particules... tout ça est géré par Flixel et relativement optimisé, et même si je n'ai pas utilisé certaines classes comme la générations de maps à partir de tiles, ou celles dédiées aux jeux de plate-forme, il y en a beaucoup d'autres qui m'ont évité d'avoir à réinventer la roue...
Le seul reproche que je fais à Flixel, c'est sa doc trop peu détaillée, même si elle a le mérite d'exister, et en règle générale le peu d'aide qu'on peut trouver à son propos sur le net concernant les dernières versions (apparemment beaucoup de choses ont changé et les tutoriels et snippets valables pour les versions 2.x ne le sont plus).
Pour finir, voici quelques point que j'aimerais améliorer d'ici la fin du développement du jeu, et d'autres qui soulèvent des interrogations encore non résolues.
La concordance entre la musique et le jeu :
Il y a plusieurs raisons qui font que le jeu ne semble pas forcément toujours en accord avec la musique. J'essaierai de ne pas rentrer dans des détails trop techniques ici, car certaines de ces raisons sont extrêmement simples. Imaginez-vous le jeu : le personnage joueur est en bas de l'écran, les ennemis arrivent par le haut. Il sont donc générés hors de l'écran avant de descendre vers le joueur. Et c'est là le problème : les ennemis ont beau apparaître en rythme, on ne les voit pas apparaître. On les voit seulement pénétrer dans la zone de jeu, d'une manière "progressive" (leur déplacement). On pourrait imaginer prévoir la musique à l'avance pour palier à ce problème (mais il y a des chances que le résultat paraisse encore plus aléatoire...), mais cela suggère de devoir créer à l'instar d'un Stepmania par exemple, un fichier contenant la musique et tous les ennemis qu'elle générera. Bref, une solution beaucoup moins agréable que le simple copié-collé de fichiers mp3 dans un répertoire désigné (qui devront tout de même être listés dans un fichier - txt ou xml, à moins d'avoir recours à la technologie Air par exemple). Quant à faire faire au programme la même chose qu'actuellement, mais à l'avance, je ne sais pas si c'est possible, puisqu'avec la méthode que j'utilise, flash capture simplement l'onde sonore "en direct", autrement dit à une frame donnée on n'a pas accès à la suite de la musique (ni à ce qu'il y avait avant...)
Les ennemis :
Des formes géométriques, je pense que ça peut être améliorer. Non pas que ce soit une mauvais chose en soit, même si détruire des carrés et des hexagones est moins palpitant qu'exploser des aliens ; ce type d'ennemi fonctionne bien avec l'ambiance voulue mais il doit y avoir moyen de faire mieux, plus esthétique.
Online ou Offline :
Le problème vient des musiques : si le jeu se joue en ligne, l'import de musiques par le joueur se fait par un upload qui en plus d'ajouter un délai supplémentaire (surtout qu'il faut ensuite re-télécharger dans l'autre sens la musique pendant le jeu...) nécessite forcément un serveur et le script PHP qui va bien. Exit donc les portails tels que Newgrounds ou Kongregate, le seul avantage c'est que le script PHP peut également ajouter le mp3 au fichier txt/xml que j'évoquais plus haut et qui s'avère nécessaire pour lister les musiques du joueur. L'autre solution est donc de proposer le jeu en téléchargement, ce qui arrange tout le monde... les seuls problèmes ici sont la perte des avantages de flash en terme d'accessibilité, et le manque d'habitude des joueurs de jouer à du flash ailleurs que dans leur navigateur web. Le mieux serait je pense de faire deux versions du jeu, l'une destinée aux grands portails et jouable via navigateur et contenant une liste prédéfinie de musiques (libres), et la seconde à télécharger.
Je pense que ça suffira pour Lux, j'en reparlerai une fois le jeu plus avancé. Pour information, le jeu est actuellement jouable dans tous les modes de difficultés, je suis en train de m'occuper du menu principal, ensuite viendront les chargements de musique. Il faudra aussi implémenter le mode de jeu "Survie".